package edu.corn.job.core.processor.adapter;

import edu.corn.job.core.context.JobRunningContext;
import edu.corn.job.core.processor.AbstractJobProcessor;

/**
 * 处理器应当是无状态的。并且不由用户控制。
 */
public interface JobAdapter {

    /**
     * 执行传入的job。
     *
     * @param context 上下文。
     * @return 传出下一阶段执行的job。
     */
    void executeJob(JobRunningContext context);


    /**
     * 获取job
     *
     * @return
     */
    AbstractJobProcessor getJobProcessor();

    /**
     * 当调用该接口时，根jobAdapter会将当前执行的job名返回。
     * 如果是一个CompositeJob中的Phase在执行，
     * @return 如果当前申请了锁，会返回第一个申请锁的阶段。
     */
    String save();

    /**
     * 根据传入的job名称，还原当前执行的环境和进度。
     * @param jobName job名称。
     */
    void load(String jobName);

}
